<?php

namespace Kuoqi;

/**
 * 核心组键
 * Class Cli
 * @package Kuoqi
 */
class Cli{

    public $route = '';
    public $mode = '';//使用cli的模块
    public $comm = '';//当前执行的命令
    public $server = null;//当前服务的对象信息
    public $params = array();

    /**
     * User kuoqi
     * Datetime 2022/2/26 22:12
     * Remark 基础的运行入口
     */
    public function running(){
        //Error::process('应用运行【running】开始');
        \Kuoqi\Params::$HOME||(\Kuoqi\Params::$HOME = \Kuoqi\Params::$APP_ROOT.'/web');//WEB_ROOT系统根目录的路径信息
        $this->__initCommonConfig();
        $this->start();//开始执行函数信息
        return ;
    }

    public function start(){
        //判定输出的内容信息
        //使用模块的相关信息指定模块参数，之后使用键值对的方式进行处理，中间不能使用空格
        foreach ($GLOBALS['argv'] as $k=>$v){
            if($k==0){

            }else if($k==1){
                $this->mode = $v;
            }else if($k==2){
                $this->comm = $v;
            }elseif($k%2){
                $this->params[$v] = isset($GLOBALS['argv'][$k+1])?$GLOBALS['argv'][$k+1]:'';
            }
        }
        //参数已配置完成，然后进行一个模块的初始化使用，还是使用cli模块进行一个交互吧
        $route = sprintf('\Kuoqi\Cli\%s',ucwords($this->mode));
        if(class_exists($route)){
            $this->server = new $route($this->comm,$this->params,$this);
        }else{
            $this->server = new \Kuoqi\Cli\Help($this->comm,$this->params,$this);
        }
        $this->server->start();
    }

    /**
     * 初始化公共配置模块
     * User kuoqi
     * Datetime 2022/2/28 19:38
     * Remark
     */
    public function __initCommonConfig(){
        //Error::process('加载公共配置');
        $file = new FileDriver();
        $file->setDirname(Params::$DS .'application'.Params::$DS . 'common');
        $file->setBasename('function.php');
        $file->includeFile(true);
        $file->setBasename('config.php');
        $config = $file->includeFile(true);
        if(is_array($config)){
            foreach($config as $k=>$v){
                Config::set($k,$v);
            }
        }
    }

    /**
     * App constructor.
     */
    public function __construct()
    {

    }
    /**
     * __destruct system
     */
    public function __destruct()
    {

    }

}

